package com.ruoyi.system.service;

import java.util.List;
import java.util.Map;

import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.domain.CommunityBusinessTarget;

/**
 * 小区业务目标Service接口
 * 
 * @author alex
 * @date 2025-08-05
 */
public interface ICommunityBusinessTargetService 
{
    /**
     * 查询小区业务目标
     * 
     * @param id 小区业务目标主键
     * @return 小区业务目标
     */
    public CommunityBusinessTarget selectCommunityBusinessTargetById(Long id);

    /**
     * 查询小区业务目标列表
     * 
     * @param communityBusinessTarget 小区业务目标
     * @return 小区业务目标集合
     */
    public List<CommunityBusinessTarget> selectCommunityBusinessTargetList(CommunityBusinessTarget communityBusinessTarget);

    /**
     * 新增小区业务目标
     * 
     * @param communityBusinessTarget 小区业务目标
     * @return 结果
     */
    public int insertCommunityBusinessTarget(CommunityBusinessTarget communityBusinessTarget);

    /**
     * 修改小区业务目标
     * 
     * @param communityBusinessTarget 小区业务目标
     * @return 结果
     */
    public int updateCommunityBusinessTarget(CommunityBusinessTarget communityBusinessTarget);

    /**
     * 批量删除小区业务目标
     * 
     * @param ids 需要删除的小区业务目标主键集合
     * @return 结果
     */
    public int deleteCommunityBusinessTargetByIds(Long[] ids);

    /**
     * 删除小区业务目标信息
     * 
     * @param id 小区业务目标主键
     * @return 结果
     */
    public int deleteCommunityBusinessTargetById(Long id);

    /**
     * 导入小区目标数据
     *
     * @param userList 用户数据列表
     * @param isUpdateSupport 是否更新支持，如果已存在，则进行更新数据
     * @param operName 操作用户
     * @return 结果
     */
    public String importUser(List<CommunityBusinessTarget> userList, Boolean isUpdateSupport, String operName);


    /**
     * 导入小区实时数据
     *
     * @param userList 用户数据列表
     * @param isUpdateSupport 是否更新支持，如果已存在，则进行更新数据
     * @param operName 操作用户
     * @return 结果
     */
    public String importTimeUser(List<CommunityBusinessTarget> userList, Boolean isUpdateSupport, String operName);


    public List<CommunityBusinessTarget> selectCommunityBusinessTargetByDeptIds(List<Long> deptIds);

    /**
     * 根据部门ID列表和时间范围查询小区业务目标
     * @param deptIds 部门ID列表
     * @param targetTime 目标时间
     * @return 小区业务目标列表
     */
    public List<CommunityBusinessTarget> selectCommunityBusinessTargetByDeptIdsAndTime(List<Long> deptIds, java.util.Date targetTime);

    /**
     * 根据套餐类型统计各营业部下套餐数量，返回dept_id和dept_name
     */
    public List<Map<String, Object>> countByRanking(Long deptId);

    /**
     * 根据状态查询小区业务目标列表
     * 
     * @param status 状态（0为已完成，1为计划开展）
     * @return 小区业务目标集合
     */
    public List<CommunityBusinessTarget> selectCommunityBusinessTargetByStatus(String status);

    /**
     * 查询未开展小区列表
     * 查询所有三层级小区中未在小区业务目标表中的小区
     * 
     * @return 未开展小区列表
     */
    public List<com.ruoyi.common.core.domain.entity.SysDept> selectUnstartedCommunities();
}
